#pragma once

#include <opencv2/opencv.hpp>

extern "C"
{
#include <libavformat/avformat.h>
// #include <libavdevice/avdevice.h>
// #include <libavcodec/avcodec.h>
// #include <libavutil/avutil.h>
// #include <libavfilter/avfilter.h>
// #include <libswscale/swscale.h>
// #include <libavutil/opt.h>
// #include <libavutil/time.h>
}

class FrameProcessor {


private:
    int m_idx;
    static FrameProcessor* m_instance;

private:
    FrameProcessor();

    void yuv422_to_mat(AVFrame *frame);
    void process_frame(const cv::Mat& frame);

public:
    static FrameProcessor* getInstance();
    void ProcessYUVFrame(AVFrame* pYUVFrame);

    double* result;
};